package OBSXML;
import Errorhandler.ErrorLogger;
import java.io.*;
import java.util.*;

/**
 * ReportFinder indeholder hardcoded information om hvor error loggen og
 * konfigurations filen der angiver batchkørsels rapporterne placering findes.
 * ReportFinder finder en liste med navnene på rapporterne.
 * 
 * Evt. fejl skrives til error log. Dog kan der opstå en fejl der ikke kan
 * logges hvis der ikke er skriverettighed til log bibliotektet. Det er
 * Organisators driftafdelings opgave at sikre at der til enhver tid er skrive-
 * rettighed til log biblioteket. Alternativ kan der skrives til OS event log,
 * det rette sted at angive den kode er markeret med kommentaren
 * SKRIV_TIL_OS_EVENT_LOG. Organisators drift afdeling vælger selv hvilken
 * løsning de foretrækker og står selv for en eventuel implementering.
 *
 * @author Jesper Wistoft Nielsen
 */
public class ReportFinder {

    private String logDir = System.getProperty("user.dir") + File.separator+"log"+File.separator;
    private String logName = "ReportFinderErrors.log";
    // angiver hvilket bilbiotek der skal søges i - angives via en parameter
    // når et ReportFinder objekt oprettes
    private File dir;
    CollectorCONF cc = new CollectorCONF(File.separator+"app_config"+File.separator, "Collector.xml");
    // Filter der frasorterer biblioteker og gemte filer.
    // Desuden undersøges om der er læse og skrive rettighed til en given fil.
    // Hvis der er det antages det at filen ikke er i brug af et andet system.
    private FileFilter fileFilter = new FileFilter()
            {public boolean accept(File file) { return file.isFile()
                      && !file.isHidden() && file.canRead() && file.canWrite();}
            };
    private File[] fileArray;
    private LinkedList <String> filePaths = new LinkedList <String>();

    /**
     * 
     */
    public ReportFinder () {
        // angiv Batch Rapport bilbiotek
        dir = new File(cc.getReportDir());

        try {
            fileArray = dir.listFiles(fileFilter);
        } catch (SecurityException ex) {
            // send fejlmeddelse til ErrorLog
            try {
                ErrorLogger.writeToErrorLog(logDir+logName,"Du har ikke læse rettighed til det angivne biblioteket: "+ex.getMessage()+"\n");
            } catch (Exception ex1){} // fejl hvis der ikke kan skrives til log kan ikke håndteres, SKRIV_TIL_OS_EVENT_LOG
        } catch (Exception ex) {
            // send fejlmeddelse til ErrorLog
            try {
                ErrorLogger.writeToErrorLog(logDir+logName,"Fejl opstået: "+ex.getMessage()+"\n");
            } catch (Exception ex1){} // fejl hvis der ikke kan skrives til log kan ikke håndteres, SKRIV_TIL_OS_EVENT_LOG
        }
        // tilføj fil-stier fra fileArray til filePaths linked list
        try {
            for (File file : fileArray)
                filePaths.add(file.getAbsolutePath());
        } catch (NullPointerException ex) {
            // send fejlmeddelse til ErrorLog
            try {
                ErrorLogger.writeToErrorLog(logDir+logName,"Batch rapport stien kunne ikke findes.\n");
            } catch (Exception ex1){} // fejl hvis der ikke kan skrives til log kan ikke håndteres, SKRIV_TIL_OS_EVENT_LOG
        } catch (Exception ex) {
            // send fejlmeddelse til ErrorLog
            try {
                ErrorLogger.writeToErrorLog(logDir+logName, "Fejl opstået: "+ex.getMessage()+"\n");
            } catch (Exception ex1){} // fejl hvis der ikke kan skrives til log kan ikke håndteres, SKRIV_TIL_OS_EVENT_LOG
        }
    }

    /**
     * Hentes listen over xml batchkørsels rappoter
     * @return liste med filnavne
     */
    public LinkedList <String> getFileList() {
        return filePaths;
    }
}